<?php

/**
 * User: wangxiaoxiao
 * Date: 2020年7月1日  0001
 * Time: 下午 15:40
 * Description:
 */

namespace common\models\base;

Class HashMapModel extends BaseModel
{
    static $H_table = array();

    /*
      * HashMap构造函数
      */
    //public function __construct() {
    //    parent::__construct();
    //    self::$H_table = array ();
    //}


    /**
     * 向HashMap中添加一个键值对
     * @param $key
     * @param $value
     * @return string
     */
    public static function put($key, $value)
    {
        if (!array_key_exists($key,self::$H_table)) {
            self::$H_table[$key] = $value;
            return null;
        } else {
            $tempValue = self::$H_table[$key];
            self::$H_table[$key] = $value;
            return $tempValue;
        }
    }


    /**
     * 根据key获取对应的value
     * @param $key
     * @return string
     */
    public static function get($key)
    {
        if (array_key_exists($key, self::$H_table)) {
            return self::$H_table[$key];
        } else {
            return null;
        }
    }


    /**
     * 移除HashMap中所有键值对
     * @param $key
     * @return string
     */
    public static function remove($key)
    {
        $tempTable = array();
        if (array_key_exists($key, self::$H_table)) {
            $tempValue = self::$H_table[$key];
            while ($curValue = current(self::$H_table)) {
                if (!(key(self::$H_table) == $key)) {
                    $tempTable[key(self::$H_table)] = $curValue;
                    next(self::$H_table);
                }
                self::$H_table = null;
                self::$H_table = $tempTable;
                return $tempValue;
            }
        } else {
            return null;
        }
    }

    /**
     * 移除HashMap中所有元素
     */
    public static function removeAll()
    {
        self::$H_table = null;
        self::$H_table = array ();
    }


    /**
     * HashMap中是否包含指定的键key
     * @param $key
     * @return bool
     */
    public static function containsKey($key)
    {
        if (array_key_exists($key, self::$H_table)) {
            return true;
        } else {
            return false;
        }
    }


    /**
     * HashMap中是否包含指定的值
     * @param $value
     * @return bool
     */
    public static function containsValue($value)
    {
        while ($curValue = current(self::$H_table)) {
            if ($curValue == $value) {
                return true;
            }
            next(self::$H_table);
        }
        return false;
    }


    /**
     * 将一个HashMap的值全部put到当前HashMap中
     * @param $map
     */
    public static function putAll($map)
    {
        if (!self::isEmpty($map) && self::size($map) > 0) {
            $keys = self::keys($map);
            foreach($keys as $key){
                self::put($key,self::get($key));
            }
        }
    }


    /**
     * 获取HashMap的所有键值
     * @return  array
     */
    public static function keys()
    {
        return array_keys(self::$H_table);
    }


    /**
     * 获取HashMap的所有value值
     * @return  array
     */
    public static function values()
    {
        return array_values(self::$H_table);
    }


    /**
     *获取HashMap中元素个数
     * @param $map
     * @return int
     */
    public static function size($map)
    {
        return count($map);
    }


    /**
     *判断HashMap是否为空
     * @param $map
     * @return bool
     */
    public static function isEmpty($map)
    {
        return (count($map) == 0);
    }


    /**
     *打印数据
     */
    public static function toString()
    {
        print_r(self::$H_table);
    }
}